Swift Package Manager
概要
Swift ビルトシステムと連携して、ソースの DL、コンパイル、リンク等を自動的に行う プラットフォーム非依存
Xcode と統合されているため、様々な操作が容易に行える クイックヘルプが見られるようになるのも良いところ
Xcode 上で直接ライブラリのコードを書き換えてビルドしたりもできる
まるでビルトインの API のようなサポートを得ることができる
SwiftPM によるマルチモジュール構成のメリット
コンパイル時間の短縮
コンパイルやリンクはモジュール毎に行われる
モジュールに変更がなければコンパイルは走らない
Xcode Preview の安定化
Mini-Application を作りやすい
機能 Module を作って利用する
概念
Swift Package の構成
Swift Package は、マニフェストを含む単純なディレクトリ。マニフェストがそのディレクトリを Swift Package として定義する。
Sources と Tests を含む。Sources 配下にはサブディレクトリを配置でき、個別にビルド可能。
基本的には、以下の 3 つから構成される。
Targets
個別にビルドできるもの
Sources 配下のサブディレクトリと 1:1 対応する
Products
パッケージがパッケージ利用者に利用できるプロダクトを定義する
クライアントがインポートできるコードを制御できる
Target を export する
Dependencies
Manifest
SwiftPM のマニフェストは、Swift で記述できる。Manifest であるソースコードが評価される頻度やタイミングについて保証しないため、宣言的に記述することが推奨されている。例えば、変数に値を入れてそれを使い回すようなことは避け、常に文字列定数を指定するのが良いとされる。 Build System
llbuild と呼ばれるビルドエンジンを利用している。ビルドシステムのためのライブラリであり、Xcode の New Build System でも利用されている。Swift OSS プロジェクトの内の 1 つでもある。 使い方
パッケージを作成する
code:console
$ mkdir ./my-package
$ cd my-package
$ swift package init --type executable
$
依存関係解決
Local Package
Xcode workspace 内のサブプロジェクトと同様のものと考えられる プラットフォーム非依存
Xcode が必要に応じて自動でビルドしてくれるため
共有コードの分離ができる
バージョン指定が不要
準備が整えば簡単に公開できる
File > New > Swift Package から生成可能
パッケージのビルドには xcodebuild も使える
Package Collections
モチベーション
たくさんのライブラリがあるので、便利に検索したい
パッケージ利用時にはライセンス等のメタデータも閲覧したい
Package Collections は、厳選されたライブラリのリストのようなものらしい
Xcode 上でライブラリを検索したり、情報を閲覧するのに便利
実態は JSON ファイルであり、HTTPS で配信される
ユースケース
企業で、Collection に含まれた信頼できるパッケージに利用を限定することなどができる
教育者が、講義内容にあった Collection をパブリッシュできる
開発者がライブラリの選定には気を配らず、開発に集中できるようにする
リソースの取り扱い
Binary Depndency
参考
CI で利用する